# 习惯上变量的命名规则，类一般用开头大写
# class info:
class Info:
    def __init__(self, num, name, score):
        self.name = name
        self.num = num
        self.score = score

    def __str__(self):
        return '学号:{} 姓名:{}  成绩:{}'.format(self.num, self.name, self.score)


# class menu:
class Menu:
    # 类的构造函数是__init__
    # 这个menu.name好像没有用到？
    # def __list__(self, name):
    def __init__(self):
        # self.name = name
        # 不建议使用list做变量名，因为list是Python的内建的类型
        # self.list = []
        self.li = []
        self.di = {}

    def aped(self, stu):
        self.li.append(stu)
        self.di[stu.num] = stu

    def delect(self, num):
        # s = self.stu_dict.pop(num)
        # self.li.remove(s)
        if not num in self.di:
            return
        stu = self.di[unm]
        del self.di[num]
        self.li.remove(stu)

    def sort_stu(self, key=None, reverse=False):
        self.li.sort(key=key, reverse=reverse)

    def get_stu(self, num):
        return self.di.get(num)

    def display(self):
        for s in self.li:
            print(s)

    def writearead(self, label):
        # 读写完毕记得关闭文件
        if label == 1:
            fo = open("data.txt", "w")
            # fo.write(str), 参数必须是一个字符串
            # fo.write(self.num, self.name, self.score)
            # 写入...所有学生信息?
            for stu in self.li:
                fo.write("%s, %s, %s\n" % (stu.num, stu.name, stu.score))
            fo.close()
        else:
            fot = open("data.txt", "r")
            # fot.read()
            fot.close()


def UI():
    print("=" * 50)
    print("1.输入数据")
    print("2.格式化输出学生成绩")
    print("3.存盘")
    print("4.读盘")
    print("请输入您的选择:")


# 先把这个类实例化成一个变量才能用
menu = Menu()

while True:
    UI()
    key = int(input("请输入功能:"))
    print("=" * 50)
    if key in range(0, 5):
        if key == 1:
            print("输入学生信息:")
            name = input("姓名:")
            num = int(input("学号:"))
            score = int(input("成绩:"))
            # stu = info(name, num, score)
            stu = Info(name, num, score)
            # menu.append(stu)
            menu.aped(stu)
        elif key == 2:
            menu.display()
        elif key == 3:
            # Python 的实例中的函数调用的时候，self是自己加上去的一个参数，
            # 表示这个实例自己，不需要在外面加
            # menu.writearead(self, 1)
            menu.writearead(1)
        elif key == 4:
            # menu.writearead(self, 2)
            menu.writearead(2)
        else:
            print("输入错误")
